package v1

import (
	"RoccBlog/api"
	"RoccBlog/global"
	"RoccBlog/model"
	"RoccBlog/model/req_resp"
	v1 "RoccBlog/service/v1"
	"github.com/gin-gonic/gin"
	"strconv"
)

type TaskProgressController struct {
	api.BaseController
	Service *v1.TaskProgressService
}

// 注册任务进度Controller 到注册中心
func init() {
	global.RegisterController(&TaskProgressController{})
}

// RegisterController 注册TaskProgressController中的路由到gin
func (c *TaskProgressController) RegisterController(engine *gin.RouterGroup) {
	//将v1.TaskProgressService添加到Controller中，保持全局单例模式
	c.Service = global.GetService(v1.TaskProgressService{}).(*v1.TaskProgressService)

	//注册路由
	g := engine.Group("/taskProgress")
	{
		//添加任务进度
		g.POST("", c.Add)
		//删除任务进度
		g.DELETE("", c.Remove)
		//更新任务进度
		g.PUT("", c.Modify)
		//获取列表任务进度
		g.GET("/list", c.Find)
		//查找byId任务进度
		g.GET("", c.FindById)
	}
}

// Add
// @Tags 任务进度管理
// @Summary 添加任务进度
// @Produce  json
// @Param TaskProgress body model.TaskProgress required "任务进度"
// @Success 200 {object} api.Result "成功"
// @Router /taskProgress [post]
func (c *TaskProgressController) Add(ctx *gin.Context) {
	var taskProgress model.TaskProgress

	//绑定参数
	err := ctx.ShouldBind(&taskProgress)
	if err != nil {
		//请求参数错误处理
		c.ResponseBadRequest(ctx)
		return
	}

	//执行添加任务进度
	err = c.Service.Add(ctx, taskProgress)
	//处理结果
	c.HandleResponseNoResult(ctx, err, "添加任务进度失败", "添加任务进度成功")
}

// Remove
// @Tags 任务进度管理
// @Summary 删除任务进度
// @Produce  json
// @Param id query int required "任务进度id"
// @Success 200 {object} api.Result "成功"
// @Router /taskProgress [delete]
func (c *TaskProgressController) Remove(ctx *gin.Context) {

	//获取请求参数
	id, err := strconv.Atoi(ctx.Query("id"))
	if err != nil {
		//请求参数错误处理
		c.ResponseBadRequest(ctx)
		return
	}

	//执行参数任务进度
	err = c.Service.Remove(ctx, id)

	//处理结果
	c.HandleResponseNoResult(ctx, err, "删除任务进度失败", "删除任务进度成功")
}

// Modify
// @Tags 任务进度管理
// @Summary 修改任务进度
// @Produce  json
// @Param TaskProgress body model.TaskProgress required "任务进度"
// @Success 200 {object} api.Result "成功"
// @Router /taskProgress [put]
func (c *TaskProgressController) Modify(ctx *gin.Context) {
	var taskProgress model.TaskProgress

	//请求参数绑定
	err := ctx.ShouldBind(&taskProgress)
	if err != nil {
		//处理请求参数错误
		c.ResponseBadRequest(ctx)
		return
	}

	//执行修改
	err = c.Service.Modify(ctx, taskProgress)
	c.HandleResponseNoResult(ctx, err, "修改任务进度失败", "修改任务进度成功")
}

// Find
// @Tags 任务进度管理
// @Summary 任务进度列表
// @Produce  json
// @Param pageNum query int false "页码"
// @Param pageSize query int false "每页数量"
// @Param params query req_resp.TaskProgress false "搜索参数"
// @Success 200 {object} api.Result "成功"
// @Router /taskProgress/list [get]
func (c *TaskProgressController) Find(ctx *gin.Context) {

	//绑定查询参数
	var params req_resp.TaskProgressReq
	err := ctx.ShouldBindQuery(&params)
	if err != nil {
		//请求参数错误处理
		c.ResponseBadRequest(ctx)
		return
	}

	//查找
	pageInfo, err := c.Service.Find(ctx, params)
	//结果处理
	c.HandleResponseResult(ctx, err, "获取任务进度列表失败", pageInfo)
}

// FindById
// @Tags 任务进度管理
// @Summary 任务进度by id
// @Produce  json
// @Param id query int false "任务进度id"
// @Success 200 {object} api.Result "成功"
// @Router /taskProgress [get]
func (c *TaskProgressController) FindById(ctx *gin.Context) {

	//绑定请求参数id
	id, err := strconv.Atoi(ctx.Query("id"))
	if err != nil {
		//请求错误处理
		c.ResponseBadRequest(ctx)
		return
	}

	//查找返回查询结果
	TaskProgress, err := c.Service.FindById(ctx, id)

	//结果处理
	c.HandleResponseResult(ctx, err, "获取任务进度失败", TaskProgress)
}
